﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Business.Classes;
using DAL;

namespace UI
{
    public partial class editarPostNew : System.Web.UI.Page
    {
        int idPostNew = 0;
        PostNewBusiness postNewBusiness;
        PostNew postNewOriginal;
        PostNew postNew;
        Imagem imagem;
        Usuario user = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            user = (Usuario)Session["user"];
            if (user == null)
            {
                Response.Redirect(new Controlador.Controladora().GetPageLogin());
            }

            postNewBusiness = new PostNewBusiness();

            idPostNew = Convert.ToInt32(Request.QueryString["idPostNew"]);

            if (!IsPostBack)
            {
                TagBusiness tagBusiness = new TagBusiness();
                cmbTag.DataSource = tagBusiness.getAllTags();
                cmbTag.DataBind();

                postNewOriginal = postNewBusiness.getPostNewByID(idPostNew);
            }
            if (postNewOriginal != null)
            {
                populateFields(postNewOriginal);
                lbEditOrNew.Text = "Editar";
            }
            else
            {
                //Preencher o nome do usuário na lbUsuario.
                lbEditOrNew.Text = "Nova";
            }
        }

        void populateFields(PostNew postNew)
        {
            txtTitulo.Text = postNew.titulo;
            txtDescricao.Text = postNew.descricao;
            
            imgPostNew.Src = "~/FrmViewImagePostNew.aspx?idImagem=" + postNew.Imagem.idImagem.ToString();
            List<Tag> listTag = new TagBusiness().getTagsByPostNew(postNew);

            ltbTag.DataSource = listTag;
            ltbTag.DataBind();
            //foreach (Tag tag in listTag)
            //{
            //    for (int i = 0; i < ltbTag.Items.Count; i++)
            //    {
            //        if (cblTags.Items[i].Value == tag.idTag.ToString())
            //            cblTags.Items[i].Selected = true;
            //    }
            //}
        }

        protected void btOk_Click(object sender, EventArgs e)
        {
            pnFalha.Visible = false;
            pnSucesso.Visible = false;
            try
            {
                if (idPostNew == 0)
                    savePostNew();
                else
                    updatePostNew();
                
            }
            catch (Exception ex)
            {
                pnFalha.Visible = true;
                lbMsgFalha.Text = ex.Message;
            }
        }

        void savePostNew()
        {
            if (fupImage.HasFile)
            {
                string imageType = fupImage.PostedFile.FileName;
                if (postNewBusiness.permiteImagem(imageType.Substring(imageType.LastIndexOf(".") + 1, 3)))
                {
                    long tamanho = Convert.ToInt32(fupImage.PostedFile.InputStream.Length);
                    Byte[] vetor = new Byte[tamanho];
                    fupImage.PostedFile.InputStream.Read(vetor, 0, vetor.Length);

                    imagem = new Imagem()
                    {
                        imagem = vetor,
                        ImagemTamanho = tamanho,
                        imagemTitulo = fupImage.PostedFile.FileName,
                        imagemTipo = fupImage.PostedFile.ContentType
                    };

                    new ImagemBusiness().insertImagem(imagem);
                }
                else
                {
                    pnFalha.Visible = true;
                    lbMsgFalha.Text = "Somente são suportados arquivos nos formatos: gif, bmp, png ou jpg.";
                    return;
                }
                TagBusiness tagBusiness = new TagBusiness();
                List<Tag> listTag = new List<Tag>();
                for (int i = 0; i < ltbTag.Items.Count; i++)
                {
                    listTag.Add(tagBusiness.getTagByID(Convert.ToInt32(ltbTag.Items[i].Value)));
                }

                postNew = new PostNew()
                {
                    titulo = txtTitulo.Text,
                    descricao = txtDescricao.Text,
                    idImagem = imagem.idImagem,
                    data = DateTime.Now,
                    qtdLidas = 0,
                    idUsuario = user.idUsuario
                };
                postNewBusiness.InsertPostnew(postNew, listTag);

                //Incrementa pontos para o usuario
                new UsuarioBusiness().IncrementaPontos(user, 2);

                pnSucesso.Visible = true;
                lbMsgSucesso.Text = "PostNew inserida com sucesso!";
            }
        }

        void updatePostNew()
        {
            PostNew postNewOriginal = postNewBusiness.getPostNewByID(idPostNew);
            TagBusiness tagBusiness = new TagBusiness();
            List<Tag> listTag = new List<Tag>();
            int idNewTag = 0;
            for (int i = 0; i < ltbTag.Items.Count; i++)
            {
                int.TryParse(ltbTag.Items[i].Value, out idNewTag);
                if (idNewTag != 0)
                    listTag.Add(tagBusiness.getTagByID(Convert.ToInt32(ltbTag.Items[i].Value)));
                else
                {
                    Tag tag = new Tag()
                    {
                        descricao = ltbTag.Items[i].Value
                    };
                    tagBusiness.insertTag(tag);
                    listTag.Add(tag);
                }
            }

            postNewOriginal.titulo = txtTitulo.Text;
            postNewOriginal.descricao = txtDescricao.Text;
            postNewOriginal.idUsuario = user.idUsuario;
            new PostNewBusiness().updatePostnew(postNewOriginal, listTag);
            pnSucesso.Visible = true;
            lbMsgSucesso.Text = "PostNew atualizada com sucesso!";
        }

        protected void btAddTag_Click(object sender, EventArgs e)
        {
            pnFalha.Visible = false;
            lbMsgFalha.Text = string.Empty;

            ListItem listItem = new ListItem(cmbTag.SelectedItem.Text, cmbTag.SelectedItem.Value);
            if (!AlreadyAddedTag(listItem))
                ltbTag.Items.Add(listItem);
            else
            {
                pnFalha.Visible = true;
                lbMsgFalha.Text = "Você já adicionou uma tag com essa descrição!";
            }
        }

        private bool AlreadyAddedTag(ListItem listItem)
        {
            for (int i = 0; i < ltbTag.Items.Count; i++)
            {
                if(listItem.Text == ltbTag.Items[i].Text)
                    return true;
            }
            return false;
        }

        protected void btVoltar_Click(object sender, EventArgs e)
        {
            Response.Redirect(new Controlador.Controladora().GetPageLogin());
        }
    }
}
